#ifndef IMAGEADT_H_
#define IMAGEADT_H_

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

typedef struct imageCDT * imageADT;

/**
*   \fn openImage
*   Inicializa la imagen. Levanta la informacion de un archivo y la mantiene en memoria.
*   @param file Archivo .bmp de donde se levanta todo.
*   @return imageADT puntero al CDT si todo esta bien, NULL en caso contrario.
*/
imageADT openImage(char * file);

/**
*   \fn saveImage
*   Salva la imagen en un archivo.
*   @param image imageADT creado por openImage.
*   @param file Archivo .bmp de donde se levanta todo. 
*   @return 1 si todo esta bien, 0 en caso contrario.
*/
int saveImage(imageADT image, char * file);

/**
*   \fn closeImage
*   Libera toda la informacion en memoria de la imagen pasada como parametro.
*   @param image imageADT creado por openImage.
*   @return 1 si todo esta bien, 0 en caso contrario.
*/
int closeImage(imageADT image);

/**
*   \fn printHeader
*   Imprime el primer header del archivo.
*   @param image imageADT creado por openImage.
*   @return 1 si todo esta bien, 0 en caso contrario.
*/
int printHeader(imageADT image);

int isMod(imageADT image, int mod);
FILE * createOutputFile(imageADT image, char *file);
FILE *getFile(imageADT image);
/**
*   \fn printInfo
*   Imprime el segundo header del archivo.
*   @param image imageADT creado por openImage.
*   @return 1 si todo esta bien, 0 en caso contrario.
*/
int printInfo(imageADT image);

/**
*   \fn headerCheck
*   Verifica si la informacion levantada de los headers del archivo estan bien.
*   @param image imageADT creado por openImage.
*   @return 1 si todo esta bien, 0 en caso contrario.
*/
int headerCheck(imageADT image);


#endif /*IMAGEADT_H_*/
